package org.example.crazy.controller;

import lombok.RequiredArgsConstructor;
import org.example.crazy.z_strategy_model.context.StrategyContext;
import org.example.crazy.z_strategy_model.enums.StrategyEnum;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 *  根据前端传入的参数，动态的改变行为
 * @Author yzz
 * @CreateTime 2025/04/22
 * @描述: StrategyModelController 策略模式 + 简单工厂模式
 */
@RestController
@RequestMapping("/strategy")
@RequiredArgsConstructor
public class StrategyModelController {

    /**
     * 需要注入不能 new，不然里面的 map 会为null，@RequiredArgsConstructor 也可以
     */
//    @Autowired
    private final StrategyContext context;

    /**
     * 模拟业务层。
     * 当需要新的 if 分支时，需要在 StrategyEnum 中加入新对象，并新增 IStrategy 子类
     * 可消除 switch
     *
     * @param status
     */
    @GetMapping("/{status}")
    public void bizServ(@PathVariable("status") Integer status) {

        context.exeBiz(StrategyEnum.getStrategyName(status));
    }
}
